package ar.edu.frba.utn.dds.Fecha;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import ar.edu.frba.utn.dds.Expcetion.ConversionException;

public class Parser {
	
	/**
	 * Declaraci�n de variables globales de la clase
	 */
	
	String FECHAINTERNACIONAL = "yyyy-MM-dd";
	String FECHALATINOAMERICANA = "dd/MM/yyyy";
	String FECHANORTEAMERICANA = "MM-dd-yyyy";
	
	/**
	 * Metodo que se encarga de tratar de parsea la fecha
	 * @param fecha
	 * @param listaFormatos
	 * @return
	 * @throws ParseException
	 */
	
	public void convertirADate(Fecha fecha, ArrayList<String> listaFormatos) throws ParseException{
		listaFormatos.add(FECHAINTERNACIONAL);
		listaFormatos.add(FECHALATINOAMERICANA);
		listaFormatos.add(FECHANORTEAMERICANA);
		for (int cantFormat = 0; cantFormat < listaFormatos.size(); cantFormat++) {
			try {
				fecha.setFechaDate(new SimpleDateFormat(listaFormatos.get(cantFormat)).parse(fecha.getFecha()));
				if (new SimpleDateFormat(listaFormatos.get(cantFormat)).format(fecha.getFechaDate())
						.equals(fecha.getFecha())) {
					return;
				}
			} catch (ParseException e) {
				
			}
		}
		throw new ParseException("No parseo con ninguna", 0);
	}

	/**
	 * Metodo que recibe el string fechaStr es posible parsearla
	 *  o se lanza una ConversionException
	 * @param fechaStr
	 * @return
	 */
	
	public void convertirFecha(String fechaStr) throws ConversionException{
		Fecha fecha = new Fecha(fechaStr);
		try {
			this.convertirADate(fecha,new ArrayList<String>());
		} catch (ParseException e) {
			throw new ConversionException("Imposible parsear la fecha: "+fecha.getFecha());
		}
	}
	
	/**
	 * exactamente igual al metodo anterior con la diferencia que a su vez puede
	 * recibir una lista con otros formatos posibles de fechas
	 * @param fechaStr
	 * @param formatosFecha
	 * @return
	 */
	
	public void convertirFecha(String fechaStr,ArrayList<String> formatosFecha) throws ConversionException{
		Fecha fecha = new Fecha(fechaStr);
		try{
			this.convertirADate(fecha,formatosFecha);
		}catch (ParseException e) {
			throw new ConversionException("Imposible parsear la fecha: "+fecha.getFecha());
		}
	}
}